/*
* @file    : BCan.h
* @author  : Martin
* @brief   : xxx module Header file
*/
#ifndef APP_BCAN_BCAN_H_
#define APP_BCAN_BCAN_H_
/*******************************************************************************
**                          Revision Control History                          **
********************************************************************************
Version   Date         User                Comment
********************************************************************************
    0.1   2019-01-10   xxx                 - xxx xxx
*******************************************************************************/
/*==============================================================================
=======                             INCLUDES                             =======
==============================================================================*/
#include <stdint.h>
/*==============================================================================
=======               DEFINES & MACROS FOR GENERAL PURPOSE               =======
==============================================================================*/
/*==============================================================================
=======                        CONSTANTS & TYPES                         =======
==============================================================================*/
typedef struct{
	uint32_t id : 32;
	uint32_t dlc : 32;
	union{
		uint8_t data[8];

		struct{
			// byte 0
			uint32_t  : 8;
			// byte 1
			uint32_t  : 8;
			// byte 2
			uint32_t  : 8;
			// byte 3
			uint32_t  : 8;

			// byte 4
			uint32_t AbsVehSpd_MSB : 5;
			uint32_t AbsVehSpdVld : 1;
			uint32_t : 2;

			// byte 5
			uint32_t AbsVehSpd_LSB : 8;

			// byte 6
			uint32_t  : 8;
			// byte 7
			uint32_t  : 8;
		}byte;
	}data_seg;

}ABS_218msg;

typedef union {
	ABS_218msg *buf;
}ABS_218_t;

typedef struct{
	// byte 0
	uint32_t : 8;
	// byte 1
	uint32_t : 8;
	// byte 2
	uint32_t : 8;
	// byte 3
	uint32_t : 8;
	// byte 4
	uint32_t : 8;
	// byte 5
	uint32_t : 8;
	// byte 6
	uint32_t : 8;

	// byte 7
	uint32_t : 1;
	uint32_t VCUSOCDisp : 7;
}VCU_2B2msg;

typedef union{
	VCU_2B2msg *buf;
}VCU_2B2_t;

typedef struct {
	// byte 0
	uint32_t : 8;
	// byte 1
	uint32_t : 8;
	// byte 2
	uint32_t : 8;
	// byte 3
	uint32_t : 8;
	// byte 4
	uint32_t VcuDrvEgyInd_MSB : 8;
	// byte 5
	uint32_t : 7;
	uint32_t VcuDrvEgyInd_LSB: 1;

	// byte 6
	uint32_t : 8;
	// byte 7
	uint32_t : 8;
}VCU_292msg;

typedef union{
	VCU_292msg *buf;
}VCU_292_t;

typedef struct {
	// byte 0
	uint32_t : 8;
	// byte 1
	uint32_t : 8;
	// byte 2
	uint32_t : 8;
	// byte 3
	uint32_t : 8;
	// byte 4
	uint32_t VcuBattU_MSB : 3;
	uint32_t : 5;
	// byte 5
	uint32_t VcuBattU_MID : 8;

	// byte 6
	uint32_t : 6;
	uint32_t VcuBattU_LSB: 2;
	// byte 7
	uint32_t : 8;
}VCU_3F1msg;

typedef union{
	VCU_3F1msg *buf;
}VCU_3F1_t;


ABS_218msg ABS_218;
VCU_2B2msg VCU_2B2;
VCU_292msg VCU_292;
VCU_3F1msg VCU_3F1;

/*==============================================================================
=======                             EXPORTS                              =======
==============================================================================*/

/*==============================================================================
=======                  PROTOTYPES OF PUBLIC FUNCTIONS                  =======
==============================================================================*/
extern void BCan_Init();
extern void BCan_10ms();

#endif /* APP_BCAN_BCAN_H_ */
